package servlets;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import services.CondicionPagoService;
import services.CotizacionService;
import services.FacturaService;
import services.impl.CondicionPagoServiceImpl;
import services.impl.CotizacionServiceImpl;
import services.impl.FacturaServiceImpl;
import dominio.CondicionPago;
import dominio.Cotizacion;
import dominio.Factura;

/**
 * Servlet implementation class AceptarCotizacionServlet
 */
public class AceptarCotizacionServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public AceptarCotizacionServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		CotizacionService cService = CotizacionServiceImpl.getInstancia();
		CondicionPagoService condPagoService = CondicionPagoServiceImpl.getInstancia();
		FacturaService fService = FacturaServiceImpl.getInstancia();
		
		Boolean isAceptada = Boolean.parseBoolean(request.getParameter("aceptar"));
		Integer cotizacionID = Integer.parseInt(request.getParameter("cotizacionID"));
		Integer cantCuotas = Integer.parseInt(request.getParameter("cantCuotas"));
		Float descuento = Float.parseFloat(request.getParameter("descuento"));
		
		Cotizacion cot = cService.findByID(cotizacionID);
		
		Integer idCliente = cot.getCliente().getIdCliente();
		
		Factura factura;
		if(isAceptada){
			factura = cService.aceptarCotizacion(cot);
			CondicionPago condPago = condPagoService.generarCondicionPago(cantCuotas, idCliente);
			factura.setCondPago(condPago);
			
			condPagoService.grabarCondicionPago(condPago);
			
			factura.setDescuento(descuento);
			fService.grabarFactura(factura);
			
			Factura facturaGuardada = fService.findUltimaGuardada();

			request.setAttribute("factura", facturaGuardada);
			request.setAttribute("totalConDescuento", (facturaGuardada.getMonto() + facturaGuardada.getMonto()* facturaGuardada.getCondPago().getRecargoInteres()/100 - facturaGuardada.getMonto() * facturaGuardada.getDescuento()/100));
			request.getRequestDispatcher("mostrarFactura.jsp").forward(request, response);
		}else{
			cService.rechazarCotizacion(cot);
			request.getRequestDispatcher("rechazarCotizacion.jsp").forward(request, response);
		}
		
		
		
	}

}
